Pivotal TrackerのAPIでPBIを検索してみる

Pivotal TrackerのAPIでPBIを検索してみる

Pivotal TrackerのAPIでPBIを検索してみました。
Clock Icon2022.11.15

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

スクラムのプロジェクト管理にPivotal Trackerを使っています。 本記事では、Pivotal Trackerが提供するAPIを使って、PBIを検索してみました。

おすすめの方

  • Pivotal TrackerのAPIを使いたい方
  • Pivotal TrackerのAPIでPBIを検索したい方

Pivotal Trackerの状態を確認する

実験用のPivotal Trackerのプロジェクトには、次のPBIがあります。

Pivotal TrackerのPBIの様子

Pivotal TrackerのAPIトークンを取得する

下記を参考にしてAPIトークンを取得します。

Pivotal TrackerのAPIで検索する

次のAPIを利用します。

利用できるキーワードは下記です。複数のキーワードを指定する場合は、半角空白で結合します(しばらく分からなかった)。

本記事ではPythonでAPIアクセスします。次の条件で検索します。

  • PBIの種類: feature, bug, chore
  • PBIの状態: unscheduled, unstarted(未着手、または、iceboxにあるPBI)
import json
import urllib.parse
import requests


API_ENDPOINT = 'https://www.pivotaltracker.com/services/v5'
TOKEN = 'you_token'

PROJECT_ID = 'xxx'

headers = {
    'X-TrackerToken': TOKEN
}

def main():
    result = search()

    # print(json.dumps(result, indent=2))

    for item in result['stories']['stories']:
        print(item['name'])

    print('------')
    print(result['stories']['total_hits'])


def search():
    # わかりやすさ優先でListで書いてみる
    query = [
        'type:feature,bug,chore',
        'state:unscheduled,unstarted',
    ]
    url_query = {
        # キーワードの区切りは半角空白
        'query': ' '.join(query),
    }

    parameter = urllib.parse.urlencode(url_query)
    resp = requests.get(f'{API_ENDPOINT}/projects/{PROJECT_ID}/search?{parameter}', headers=headers)
    return resp.json()


if __name__ == '__main__':
    main()

検索してみる

python app.py

次の結果になりました。バッチリですね。

警備員は、xxxの異常を電話で知りたい。なぜならすぐに駆けつけて解決したいからだ。(持ち越し用)
買い物客は、商品一覧ページに1秒未満で遷移したい。なぜなら検索が遅いと購入する気が無くなるからだ。
Lambdaで使っているPythonを3.6から3.8にしたい
hogeしたとき、次の画面に進めなくなる
CI/CDパイプラインを見直して改善する
管理者は、昨日のxxxの異常をメールで一覧で知りたい。なぜなら……
[TB 1h*2] zzzの動作検証をする
買い物客は、やっほーしたい
Webアプリの「foo」ボタンを連打しまくると、LambdaでErrorが発生する
------
9

さいごに

プロジェクトIDを変えて実験してみたところ、330件のPBIが取得できました。 API仕様にも最大取得件数や次ページなどの指定が無いので、全件取得できそうです。

参考

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.